// const ROOT_PATH = require('app-root-path'); //项目根路径
const coding = ""; //"SET NAMES 'utf8';";// 编码方式
const $mysql = require('mysql');

let poolConn = function() {
    return $mysql.createPool(process.env.DB_CONFIG);
};

const pool = poolConn(); //创建数据库连接池

//多条sql语句查询(需要数据库连接需要开启:"multipleStatements": true,)
let queryAlls = (sql, ...params) => {
    sql = $mysql.format(coding + sql, params);

    console.log(sql);
    return new Promise(function(resolve, reject) {
        pool.getConnection(function(err, conn) {
            if (err) {
                reject(err);
                return;
            }
            conn.query(sql, (err, result) => {
                conn.release(); //连接不再使用，返回到连接池
                if (err) {
                    reject(err);
                    return;
                }
                coding ? result.shift() : coding;
                resolve(result);
            });
        });
    });
};

// 返回一个数组对象，所有数据
let queryAll = (sql, ...params) => {
    sql = $mysql.format(coding + sql, params);

    console.log(sql);
    return new Promise(function(resolve, reject) {
        pool.getConnection(function(err, conn) {
            if (err) {
                reject(err);
                return;
            }
            conn.query(sql, (err, result) => {
                conn.release(); //连接不再使用，返回到连接池
                if (err) {
                    reject(err);
                    return;
                }
                coding ? result.shift() : coding;
                // result = Array.prototype.concat.apply([],result);//二维数组转一维
                // coding ? result[0] :
                resolve(result);
            });
        });
    });
};

// 返回一个对象，一条数据
let queryOne = (sql, ...params) => {
    sql = $mysql.format(coding + sql, params);

    console.log(sql);
    return new Promise((resolve, reject) => {
        pool.getConnection(function(err, conn) {
            if (err) {
                reject(err);
                return;
            }
            conn.query(sql, (err, result) => {
                conn.release(); //连接不再使用，返回到连接池
                if (err) {
                    reject(err);
                    return;
                }
                coding ? result.shift() : coding;
                resolve(coding ? result[0][0] : result[0] || {});
            });
        });
    });
};

// 返回单个查询结果，一个值
let querySingle = (sql, ...params) => {
    sql = $mysql.format(coding + sql, params);

    console.log(sql);
    return new Promise((resolve, reject) => {
        pool.getConnection(function(err, conn) {
            if (err) {
                reject(err);
                return;
            }
            conn.query(sql, (err, result) => {
                conn.release(); //连接不再使用，返回到连接池
                if (err) {
                    reject(err);
                    return;
                }
                if (coding) {
                    result.shift();
                    // result = Array.prototype.concat.apply([],result);//二维数组转一维
                }
                for (let i in result[0]) {
                    resolve(result[0][i] || "");
                    return;
                }
                resolve("");
            });
        });
    });
};

module.exports = {
    poolConn,
    queryAll,
    queryOne,
    queryAlls,
    querySingle
};